<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- <input type="text" oninput="newhandleInput"> -->
</body>

</html>
<script>
    // function handleInput() {
    //     console.log('输入发生改变，发起网络请求');
    // }
    // 事件防抖
    // function debounce(func, time) {
    //     var timerid = null;
    //     return function () {
    //         if (timerid) {
    //             clearTimeout(timerid);
    //         }
    //         timerid = setTimeout(() => {
    //             func();
    //         }, time)
    //     }
    // }
    // 事件节流
    // function throttle( func, time ){
    //         var timerid = null;
    //         return function(){
    //             if( !timerid ){
    //                 timerid = setTimeout(()=>{
    //                     func();
    //                     clearTimeout(timerid);
    //                     timerid = null;
    //                 }, time )
    //             }
    //         }
    //     }
    // var newhandleInput = debounce(handleInput, 100)
    // 柯里化函数
    // function add(a){
    //         return function(b){
    //             return function(c){
    //                 console.log(a+b+c);
    //             }
    //         }
    //     }

    //     //函数的普通调用方式
    //     //add(10,20,30)
    //     //柯里化函数
    //     add(10)(20)(30)
    // 继承-构造函数
    // function Father(){
    //         this.height = 199;
    //         this.color = 'yellow';
    //         this.money = 9999999;

    //         this.run = function(){
    //             console.log('running');
    //         }
    //     }

    //     function Son(){
    //         //构造函数继承( 构造函数+call )
    //         Father.call(this);//继承了Father的所有属性和方法
    //     }

    //     var s = new Son();
    //     s.run();//s.run() 之所以能调用成功,是因为 Son这个构造函数继承了Father这个构造函数的所有属性和方法
    // 继承-原型链
    // function Father(){
    //         this.height = 199;
    //         this.color = 'yellow';
    //         this.money = 9999999;

    //         this.run = function(){
    //             console.log('running');
    //         }
    //     }

    //     function Son(){}

    //     //通过更改Son的原型对象, 更改为Father的实例对象, 实现了通过原型链继承Father的属性
    //     Son.prototype = new Father();

    //     var s1 = new Son();
    //     var s2 = new Son();
    //     var s3 = new Son();
    //     // s.run();//s.run() 之所以能调用成功,是因为 Son这个构造函数继承了Father这个构造函数的所有属性和方法
    //     // console.log(s.height,s.color,s.money);
    //     console.log(s1,s2,s3);
    // 组合继承
    // function Father(){
    //         this.height = 199;
    //         this.color = 'yellow';
    //         this.money = 9999999;
    //     }

    //     function Son(){
    //         Father.call(this);//构造函数
    //     }

    //     //将方法保存到原型对象身上, 使用Son构造函数创建的所有实例对象 都可以访问到该方法, 但是该方法只保存了一份(在原型对象身上)
    //     Son.prototype.run = function(){ console.log('running'); } ;//原型链

    //     var s1 = new Son()
    //     var s2 = new Son()
    //     var s3 = new Son()
    //     console.log(s1,s2,s3);
    // class继承
    class Father {
            constructor(){
                this.height = 199;
                this.color = 'yellow';
                this.money = 9999999;
            }
            run(){
                console.log('running');
            }
        }

        //class继承, 通过extends 关键词实现继承
        class Son extends Father {}

        var s = new Son()
        console.log(s);
</script>